0453. 最小操作次数使数组元素相等【中等】
1. 📝 题目描述
给你一个长度为 n 的整数数组,每次操作将会使 n - 1 个元素增加 1。返回让数组所有元素相等的最小操作次数。
示例 1:
txt
输入:nums = [1,2,3]
输出:3
解释:
只需要3次操作(注意每次操作会增加两个元素的值):
[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]1
2
3
4
5
2
3
4
5
示例 2:
txt
输入:nums = [1,1,1]
输出:01
2
2
提示:
n == nums.length1 <= nums.length <= 10^5-10^9 <= nums[i] <= 10^9- 答案保证符合 32-bit 整数
2. 🎯 s.1 - 数学
c
int minMoves(int* nums, int numsSize) {
int min = nums[0];
for (int i = 1; i < numsSize; i++)
if (nums[i] < min) min = nums[i];
int res = 0;
for (int i = 0; i < numsSize; i++) res += nums[i] - min;
return res;
}1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
js
/**
* @param {number[]} nums
* @return {number}
*/
var minMoves = function (nums) {
const min = Math.min(...nums)
let res = 0
for (const num of nums) res += num - min
return res
}1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
py
class Solution:
def minMoves(self, nums: List[int]) -> int:
return sum(nums) - min(nums) * len(nums)1
2
3
2
3
- 时间复杂度:
- 空间复杂度:
算法思路:
- 每次对
个元素加 1 等价于对 1 个元素减 1 - 因此答案为